连接两个表的ID的SQL命名约定

连接两个表的ID的SQL命名约定,sql,naming-conventions,Sql,Naming Conventions,我对我的列名使用驼峰式大小写,我尽量不把ID仅仅用作表的主键 因此,对于一些桌子来说,这似乎是一个很好的选择。Profile表我称之为主键profileID,但是连接两个表的表呢。ProfileImageID的约定是什么?看起来有点困惑,直接叫它ID会更好吗?对于主键,命名约定是ID还是____; ID 配置文件表 userID (PK) | Name ??? (PK) | userID | photoID photoID(PK) | Image 配置文件图像表 userID (PK) |

我对我的列名使用驼峰式大小写,我尽量不把ID仅仅用作表的主键

因此,对于一些桌子来说,这似乎是一个很好的选择。Profile表我称之为主键profileID,但是连接两个表的表呢。ProfileImageID的约定是什么?看起来有点困惑,直接叫它ID会更好吗?对于主键,命名约定是ID还是____; ID

配置文件表

userID (PK) | Name
??? (PK) | userID | photoID
photoID(PK) | Image
配置文件图像表

userID (PK) | Name
??? (PK) | userID | photoID
photoID(PK) | Image
图像表

userID (PK) | Name
??? (PK) | userID | photoID
photoID(PK) | Image

我的建议是:以复数形式命名表,并使用表名(单数)加上“Id”作为键:

create table Profiles (
    ProfileId int . . 
);

create table ProfileImages (
    ProfileImageId int . . .,
    ProfileId int references Profiles(ProfileId),
    ImageId int references Images(ImageId)
);

create table Images (
    ImageId int . . .,
    . . .
);

命名约定没有一个正确的答案。但是,一致性和可理解性很重要。您不应该使用名为
Images
的表和名为
PhotoId
的主键。这只会带来一定程度的混乱。

为什么不给外部参照表两列与其他表同名的列(
profileID
photoID
)?因此,对于引用其他每个表上相同字段的每个表,您都有一个外键,并且在
profileID
上有一个PK,这样就没有一个配置文件有2+个相关的照片。很抱歉,我忘了添加用户id列。你会打电话给我吗???Id或userPhotoID或其他东西。这方面的惯例是什么?我看不出第三栏有什么意义。如果你不跟踪用户照片随时间的变化,我不确定你是否真的需要一张
profile\u image
表。如果您只需要知道他们当前的照片是什么,并且他们只能有一张照片,您可以将
photoID
列添加到
profile
表中(图像表中有一个FK)。