【发布时间】:2012-01-15 22:52:35
【问题描述】:
我想设计一个名为arguments 的表,其属性name 链接到名为names 的表中的另一个属性name。
我看到了两种用 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);
我想知道:
- 如果两者中的一个通常被认为比另一个更好,并且
- 如果它会产生我应该注意的后果。
感谢您的帮助。
【问题讨论】:
-
您使用的是什么关系型数据库? MySQL?数据库服务器?等等?
-
使用文本数据作为键是一种不好的做法。您的名称表应该有一个 ID 列,然后这将成为任何引用的 FK。
-
@cdeszaq 我正在使用 SQLite(用于概念证明)。
-
如果这只是概念证明,那没关系。完成证明,然后进行实际工作。不要浪费时间解决现在不存在的问题。
-
@cdeszaq - 虽然“不要让事情阻止你完成它”的观点有很大的优点,但我不会将其作为避免良好实践的理由(例如保留标识符和数据作为单独的实体)。 尽可能合理地完成它可以并且确实让生活变得更容易,如果并且当你开始生产概念证明时。概念验证的一部分通常应该是软件架构。
标签: sql database database-design foreign-keys