在数据库列中,您更喜欢详细命名吗?

Way*_*ina 6 sql database-design naming naming-conventions

你最喜欢哪个?

假设我们有一个通用的Product表,它有一个ID,一个名称和一个类别的外键引用.您是否愿意将您的桌子命名为:

CREATE TABLE Products
(
    ProductID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    CategoryID int NOT NULL FOREIGN KEY REFERENCES Categories(CategoryID),
    ProductName varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

使用列的显式命名(例如产品名称,产品 ID)或类似的东西:

CREATE TABLE Products
(
    ID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    CategoryID int NOT NULL FOREIGN KEY REFERENCES Categories(ID),
    Name varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

从我所看到的,.NET世界中的约定是明确的 - 样本倾向于使用第一个示例,而开源和RoR世界倾向于第二个示例.就个人而言,我发现第一眼看上去更容易阅读和理解: select p.ProductID, p.ProductName, c.CategoryName from Categories c inner join Products p on c.CategoryID = p.CategoryID对我来说似乎比自然更自然select p.ID AS ProductID, p.Name AS ProductName, c.Name AS CategoryName from Categories c inner join Products p on c.ID = p.CategoryID

我想,鉴于我提供的基本示例并不是什么大问题,但是当你处理大量数据和表格时呢?我仍然会发现第一个例子比第二个更好,尽管两者的某些组合可能值得研究(<Table>ID对于ID,但仅仅Name是名称?).显然,在现有项目中,您应该遵循已经建立的惯例,但是对于新开发呢?

你有什么偏好?

thi*_*ing 26

表名已经给出了上下文.无需为列名添加前缀.连接表时使用table.column语法.


Row*_*haw 11

我是选项3的粉丝:

CREATE TABLE Products
(
    ProductId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    CategoryId int NOT NULL FOREIGN KEY REFERENCES Categories(CategoryId),
    Name varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

所以主键是唯一一个获得表名作为前缀的列 - 恕我直言,它可以更容易地看到连接出错的时间.然后,如果有可能在将来的任何时候处理合并复制情况,我也喜欢使用GUID作为主键...