假设我在父子关系中有两个表。我们称之为“网站”和“建筑物”,其中“网站”是一个或多个“建筑物”的父母。我希望ID在数据库中是唯一的,因此我将使用GUID作为ID。
我是否更喜欢表格中ID字段的通用名称或强类型名称?为什么?
示例1(通用名称):
CREATE TABLE sites (
id VARCHAR(38) NOT NULL,
-- other attributes
);
CREATE TABLE buildings (
id VARCHAR(38) NOT NULL,
parent_id VARCHAR(38) NOT NULL,
-- other attributes
);
示例2(强类型名称):
CREATE TABLE sites (
site_guid VARCHAR(38) NOT NULL,
-- other attributes
);
CREATE TABLE buildings (
building_guid VARCHAR(38) NOT NULL,
site_guid VARCHAR(38) NOT NULL,
-- other attributes
);
答案 0 :(得分:4)
我更喜欢简单的id,因为这是标准约定,这里是所有数据库命名约定的绝佳链接:http://weblogs.asp.net/jamauss/pages/DatabaseNamingConventions.aspx#Columns
“规则2a(标识主键字段) - 对于作为表的主键并唯一标识表中每条记录的字段,名称应该只是”Id“,因为它就是这样 - 标识字段这个名字也更贴近你的类库中的“Id”属性名称。这个名字的另一个好处是,对于连接,你会看到像 “客户在Customer.Id = Orders.CustomerId上加入订单” 这使您可以在Customer表后再次避免使用“Customer”一词。“
答案 1 :(得分:3)
我更喜欢使用building_id,site_id,以便列名更明确地定义其内容而不仅仅是“id”。这也可以使用ANSI连接“使用”语法:
select site.site_id, building.building_id
from building
join site using (site_id);
另一个优点是,当在查询(或视图或子查询)中使用这些列时,它们不需要经常重新别名 - 如下所示:
select site.id as site_id, building.id as building_id
from building
join site on site.id = building.site_id;
答案 2 :(得分:1)
一种惯例是在建筑物表格中使用“building_”前缀所有字段,因此您将拥有“building_id”,“building_name”等。外键,例如“site_id” “,保留原来的名字,让它完全清楚发生了什么。
修改的
我应该提一下,我选择“_id”而不是“_uid”或“_guid”,因为只有一个ID字段,所以我没有理由强调其数据类型。
答案 3 :(得分:1)
这主要是品味问题。项目应该有一些一致性。最重要的是:
就个人而言,我更喜欢整个项目中具有相同名称的ID。编写通用代码也更容易,它独立于特定的表。
对于外键我通常使用<ForeignTable>_FK
模式。如果同一个表中有多个外键,我会像往常一样在面向对象设计<Role>_FK
中使用角色名称,例如CurrentUser_FK
。