【发布时间】:2011-03-29 07:55:52
【问题描述】:
问题:我目前正在为我的一个程序规划数据库。
我打算将 ASP.NET MVC 用于用户后端,数据库位于 Linux 和/或 Windows 上。
现在,即使我只针对 Windows,我也必须考虑到不同的客户使用不同的数据库系统。现在,我想我使用 nHibernate,然后我可以将所有内容放入代码中,它适用于所有市长数据库,例如 Oracle/Sybase/MS/PostGre/MySQL/Firebird。
我现在的探针是 GUID。 SQL Server 使用 GUID,而其余的使用整数自动增量作为主键。虽然理论上自动增量更好,但它会产生保持多个数据库同步的问题,或者手动更改事物的问题,这需要 CSV 导入/导出...
现在,由于 autoid 在实践中存在的固有问题,我更喜欢 GUID 系统。由于 guid 是一个 36 个字符的字符串,我可以使用 varchar(36) 作为主键,但使用 varchar 作为 GUID,可能不是一个理想的解决方案...
您将如何解决这个问题/您使用什么作为主键? 或者你如何避免自动增量问题,比如插入一个 csv 文件而不更改 autoid...
【问题讨论】:
-
只是不要将您的 GUID 用作 SQL Server 中的主键/集群键 - 在此处查看原因:sqlskills.com/BLOGS/KIMBERLY/post/…
-
但是...,如果 auto-id + GUID 不是一个好主意,那该怎么办?
-
我想你会发现 GUID 比自动递增整数 ID(SQL Server 也有 BTW)会造成更大的混乱。
-
GUID 如何造成混乱?我知道使用 autoinc 导入以前导出的 CSV 文件。整数会造成很大的混乱,因为它会更改在其他地方引用的所有主键......但是 GUID,你怎么能把它们弄得一团糟?我想知道如何...
标签: sql nhibernate database-design orm auto-increment