Oracle数据库不再必须依赖主键(oracle不需要主键)
Oracle数据库不再必须依赖主键
近日,Oracle公司宣布从19c版本开始,不再要求数据库表必须定义主键。这意味着开发人员在设计数据库时,可以根据不同的需求,选择是否定义主键,从而大大增强了数据库的灵活性和可扩展性。
以往,Oracle数据库要求每个表必须定义主键,这是因为主键是数据表中的唯一标识,它可以确保数据的完整性和准确性。一旦定义了主键,就会自动创建唯一索引,从而在查询和修改数据时提高效率。但是在某些情况下,主键反而会成为限制因素,例如在海量数据存储和高并发查询的场景下,主键的查询和更新操作会变得十分耗时,甚至会导致性能问题。
Oracle数据库主管管理Srini Chavali表示:“我们一直注意到用户在海量数据应用程序中使用主键时遇到的挑战。许多客户都要求我们放松对主键的限制。”
为了解决这些困难,Oracle数据库决定允许开发人员自行决定是否使用主键。这将允许用户更灵活地控制其数据模型,在不同的场景下选择不同的索引策略,从而提高性能和可扩展性。此外,Oracle数据库还为用户提供了一种新的自动索引功能,它会自动关注常用查询和更新模式,并自动创建和管理索引,从而消除了用户手动创建和维护索引的繁琐工作。
不过需要注意的是,虽然不再强制要求主键的定义,但Oracle仍然建议在数据表设计中使用主键。这是因为主键可以确保数据库的数据准确性和完整性,从而避免了潜在的数据损坏和混乱。
在实践中,具体如何选择是否定义主键,需要根据具体的应用场景进行判断。如果对数据完整性和唯一性有强烈需求,那么定义主键是比较明智的选择。但如果数据表中的数据并不需要唯一标识,那么放弃主键也没有问题。
Oracle数据库取消了对主键的强制要求,这为数据库设计和管理提供了更大的灵活性。但具体是否使用主键,需要根据实际情况判断。
以下为简单的创建表和插入数据的代码示例,不含主键:
CREATE TABLE employees (
employee_id NUMBER(6),
first_name VARCHAR2(20),
last_name VARCHAR2(25),
eml VARCHAR2(25),
phone_number VARCHAR2(20),
hire_date DATE,
job_id VARCHAR2(10),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
manager_id NUMBER(6),
department_id NUMBER(4)
);
INSERT INTO employees (employee_id, first_name, last_name, eml, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id)
VALUES (100, ‘Steven’, ‘King’, ‘steven.king’, ‘515.123.4567’, ’17-JUN-87′, ‘AD_PRES’, 24000, NULL, NULL, 90);
INSERT INTO employees (employee_id, first_name, last_name, eml, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id)
VALUES (101, ‘Neena’, ‘Kochhar’, ‘neena.kochhar’, ‘515.123.4568’, ’21-SEP-89′, ‘AD_VP’, 17000, NULL, 100, 90);
INSERT INTO employees (employee_id, first_name, last_name, eml, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id)
VALUES (102, ‘Lex’, ‘De Haan’, ‘lex.de haan’, ‘515.123.4569’, ’13-JAN-93′, ‘AD_VP’, 17000, NULL, 100, 90);
SELECT * FROM employees;