为什么DBA会选择使用大量的,大量引用的查找表而不是几个小的专用查找表,其中只有一个或两个表引用每个表。例如:
CREATE TABLE value_group (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
group_name VARCHAR(30) NOT NULL
);
CREATE TABLE value_group_value (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
value_group_id INT NOT NULL,
value_id INT NOT NULL,
FOREIGN KEY (value_group_id) REFERENCES value_group(id)
);
CREATE TABLE value (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
value_text VARCHAR(30) NOT NULL
);
示例组将是:
'州名缩写'相应的值是所有美国州缩写的列表。
'名称前缀'相应的值是一个字符串列表,如' Mr。',' Mrs。',' Dr。'等。
根据我的经验,将这些值表规范化为每个value_group的表将使更改更容易,提供清晰度,并且查询执行速度更快:
CREATE TABLE state_abbrv (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
abbreviation CHAR NOT NULL
);
CREATE TABLE name_prefix (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
prefix VARCHAR NOT NULL
);
对于value_group表中的n个组,使用n个表。然后,根据所需的关系,可以从另一个表或使用某个中间表直接引用这些新表中的每一个。
哪些因素会影响DBA使用第一个设置而不是第二个?
答案 0 :(得分:0)
根据我的经验,用于查找的单个标准化“表格表”结构的主要优点是代码重用,简化文档(如果您在1%的人员中记录您的数据库,那么)和您可以添加新的查找表而无需更改数据库结构。
如果我每次看到数据库中的某些内容让我想知道“DBA的想法是什么?”,我就可以退休到巴哈马。