Per*_*DBA 22
数据库设计的想法是将每个数据元素分开.每个元素都有自己的数据类型,约束和规则.这c0002
不是一个领域,而是两个领域.相同XXXnnn
或等等.这是不正确的,它将严重限制您使用数据的能力,并使用数据库功能和设施.
将其分解为两个独立的数据项:
column_1 CHAR(1)
column_2 INTEGER
然后设置AUTOINCREMENT column_2
是的,你的主键可以(column_1, column_2)
,所以你没有失去任何意义c0002
.
切勿将供应商和客户(无论"c"和"s"表示)放在同一张表中.如果你这样做,你将没有数据库表,你将有一个平面文件.由此产生的各种问题和限制.
这意味着,规范化数据.你最终会得到:
Person
或Organisation
包含公共数据的表(Name, Address
...)Customer
包含客户特定数据的表(CreditLimit
...)Supplier
包含供应商特定数据的表(PaymentTerms
...)当您需要添加列时,只在需要的位置执行,而不会影响平面文件的所有其他原因.效果范围仅限于变更范围.
我的方法是:
创建一个ID INT IDENTITY
列并将其用作主键(它是唯一的,窄的,静态的 - 完美的)
如果您确实需要带有字母或其他内容的ID,请根据该列创建计算列ID INT IDENTITY
尝试这样的事情:
CREATE TABLE dbo.Demo(ID INT IDENTITY PRIMARY KEY,
IDwithChar AS 'C' + RIGHT('000000' + CAST(ID AS VARCHAR(10)), 6) PERSISTED
)
Run Code Online (Sandbox Code Playgroud)
该表将包含ID
来自1, 2, 3, 4........
的值和IDwithChar
类似的C000001, C000002, ....., C000042
等等.
有了这个,你就拥有了两全其美:
表上适当的,非常适合的主键(和聚类键),非常适合从其他表中引用
你的基于角色的ID,正确定义,计算,总是最新.....
归档时间: |
|
查看次数: |
40309 次 |
最近记录: |