我想设计一个名为arguments
的表,其中一个属性name
链接到名为name
的表中的另一个属性names
。
我在SQL中看到两种表达方式:
通过在表格上创建约束:
CREATE TABLE names ( name text UNIQUE,
short text UNIQUE,
comment text);
CREATE TABLE arguments ( name text UNIQUE,
comment text,
FOREIGN KEY (name) REFERENCES names (name));
通过即时识别属性:
CREATE TABLE names ( name text UNIQUE,
short text UNIQUE,
comment text);
CREATE TABLE arguments ( name text UNIQUE REFERENCES names (name),
comment text);
我想知道:
感谢您的帮助。
答案 0 :(得分:2)
对于相同的最终结果,这些只是不同的语法。
两者都是合适的,但前者在我的经历中是一种更常见的风格。这可能只是为了让人类的思想更容易消化所有信息。首先描述数据,然后描述它与世界其他地方的关系。
我要做的一个评论是,将ID作为唯一标识符和引用更为常见。这允许您更改“名称”字段中的“值”,而不更改其标识和中断参照完整性。有些数据库可以级联这些更改并更新所有出现的名称,但通常认为具有与数据分离的标识符更清晰。
答案 1 :(得分:1)
虽然第一个选项称为out-of-line
约束声明,第二个选项为in-line
,但它们在功能上都相同。
更好的是为外键约束指定名称。如果您有名称,则可以根据需要选择性地启用和禁用约束。
创建表
CREATE TABLE arguments
(
name text UNIQUE,
comment text,
constraint arguments_fk FOREIGN KEY (name) REFERENCES names (name)
);
禁用约束
ALTER TABLE arguments NOCHECK CONSTRAINT arguments_fk;
启用约束
ALTER TABLE arguments CHECK CONSTRAINT arguments_fk;
这适用于SQL Server。 Oracle有相同的命令。
答案 2 :(得分:0)
使用外键。如果您以后发现存在性能问题(可测量问题),那么您可以将其更改为不同。
首先要保持简单,尽快将产品送到用户手中。不要优化你无法证明需要的东西。