我有表"User"(用户名,密码)和表"Profile"(profileId,性别,dateofbirth,...).目前我正在使用这种方法:每个Profile记录都有一个名为"userId"的字段作为外键,链接到User表.当用户注册时,将自动创建其配置文件记录.我对我朋友的建议感到困惑:将"userId"字段作为外键和主键并删除"profileId"字段.哪种方法更好?
在我的团队的一个相当生气勃勃的讨论中,我被认为是大多数人喜欢的主键.我们有以下小组 -
什么是PK的最佳方法?如果你可以证明你的意见,这将是很棒的.上面有没有更好的方法?
编辑:任何人都有一个简单的样本/算法来生成可扩展的行的人类可读标识符?
algorithm ddl database-design primary-key relational-database
我正在使用Rails迁移来管理数据库模式,我正在创建一个简单的表,我希望使用非整数值作为主键(特别是字符串).为了从我的问题中抽象出来,让我们说有一个表格employees,其中员工用字母数字字符串标识,例如"134SNW".
我试过在这样的迁移中创建表:
create_table :employees, {:primary_key => :emp_id} do |t|
t.string :emp_id
t.string :first_name
t.string :last_name
end
Run Code Online (Sandbox Code Playgroud)
这给了我什么似乎完全忽略了这条线t.string :emp_id并继续前进并使它成为一个整数列.有没有其他方法让rails为我生成PRIMARY_KEY约束(我正在使用PostgreSQL),而不必在execute调用中编写SQL ?
注意:我知道最好不要使用字符串列作为主键,所以请不要回答只是说添加一个整数主键.无论如何我可以添加一个,但这个问题仍然有效.
所以我有一个以标识列为主键的表,所以它是一个整数.那么,为什么SCOPE_IDENTITY()总是向我的C#应用程序返回一个十进制值而不是一个int?这真的很烦人,因为十进制值不会隐式转换为C#中的整数,这意味着我现在必须重写一堆东西,并且有很多辅助方法,因为我使用SQL Server和Postgres,Postgres确实返回一个整数等效功能..
为什么SCOPE_IDENTITY()不只返回一个普通的整数?是否有人通常使用十进制/非身份值作为主键?
出于多种原因^,我想在我的一些Django模型中使用UUID作为主键.如果我这样做,我是否仍然可以使用"contrib.com","django-voting"或"django-tagging"之类的外部应用程序,它们通过ContentType使用通用关系?
以"django-voting"为例,投票模型如下所示:
class Vote(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
vote = models.SmallIntegerField(choices=SCORES)
Run Code Online (Sandbox Code Playgroud)
这个应用程序似乎假设被投票的模型的主键是一个整数.
内置的评论应用程序似乎能够处理非整数PK,但是:
class BaseCommentAbstractModel(models.Model):
content_type = models.ForeignKey(ContentType,
verbose_name=_('content type'),
related_name="content_type_set_for_%(class)s")
object_pk = models.TextField(_('object ID'))
content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")
Run Code Online (Sandbox Code Playgroud)
对于第三方应用程序而言,这种"整数假定PK"问题是否会成为一种常见情况,这会使使用UUID变得痛苦?或者,我可能会误读这种情况吗?
有没有办法在Django中使用UUID作为主键而不会造成太多麻烦?
我有一个表列消息列ID(主键,自动增量)和内容(文本).
我有一个表用户名列有用户名(主键,文本)和哈希.
一个发件人(用户)向许多收件人(用户)发送邮件,收件人(用户)可以收到许多邮件.
我创建了一个包含两列的表Messages_Recipients:MessageID(引用Messages表的ID列和Recipient(引用Users表中的用户名列).此表表示收件人和邮件之间的多对多关系.
所以,我的问题是这个.在将新消息存储在数据库中之后,将创建新消息的ID.但是,我如何保存对刚刚添加的MessageRow的引用以便检索这个新的MessageID?
我总是可以在数据库中搜索最后添加的行,但是这可能会在多线程环境中返回一个不同的行?
编辑:据我所知,SQLite你可以使用SELECT last_insert_rowid().但是如何从ADO.Net中调用此声明?
我的持久性代码(messages和messagesRecipients是DataTables):
public void Persist(Message message)
{
pm_databaseDataSet.MessagesRow messagerow;
messagerow=messages.AddMessagesRow(message.Sender,
message.TimeSent.ToFileTime(),
message.Content,
message.TimeCreated.ToFileTime());
UpdateMessages();
var x = messagerow;//I hoped the messagerow would hold a
//reference to the new row in the Messages table, but it does not.
foreach (var recipient in message.Recipients)
{
var row = messagesRecipients.NewMessages_RecipientsRow();
row.Recipient = recipient;
//row.MessageID= How do I find this??
messagesRecipients.AddMessages_RecipientsRow(row);
UpdateMessagesRecipients();//method not shown
}
}
private void UpdateMessages()
{
messagesAdapter.Update(messages);
messagesAdapter.Fill(messages);
}
Run Code Online (Sandbox Code Playgroud) 有没有办法从mysql-database获取主键字段的名称?例如:
我有这样一张桌子:
+----+------+
| id | name |
+----+------+
| 1 | Foo1 |
| 2 | Foo2 |
| 3 | Foo3 |
+----+------+
Run Code Online (Sandbox Code Playgroud)
字段id是主键(它有自动增量但我不能使用它).如何在php中检索字段名称"id"?
有没有办法将PostgreSQL表的主键重置为在填充的表上再次从1开始?
现在它正在产生1000000及以上的数字.我想要全部重置并从1开始,保持我现有的所有数据不变.
当在数据库中用作主键时,有人曾测量过Sequential Guid与Standard Guid的性能吗?
我有一个MySQL表,主键字段打开AUTO_INCREMENT.在阅读了这里的其他帖子之后,我注意到有相同问题并且答案各不相同的人.有人建议不要使用此功能,其他人说它不能"修复".
我有:
table: course
fields: courseID, courseName
Run Code Online (Sandbox Code Playgroud)
示例:表中的记录数:18.如果我删除记录16,17和18 - 我希望输入的下一条记录的课程ID为16,但是它将是19,因为最后输入的课程ID是18.
我的SQL知识并不令人惊讶,但无论如何使用查询(或phpMyAdmin界面中的设置)刷新或更新此计数?
该表将与数据库中的其他表相关.
鉴于所有的建议,我决定忽略这个'问题'.我将简单地删除并添加记录,同时让自动增量完成它的工作.我想这个数字到底是什么并不重要,因为它只被用作唯一标识符,并且没有(如上所述)商业含义.
对于那些我可能与我的原帖混淆的人:我不想用这个字段来知道我有多少记录.我只是希望数据库看起来整洁,并且具有更多的一致性.
primary-key ×10
database ×4
mysql ×2
algorithm ×1
content-type ×1
ddl ×1
django ×1
foreign-keys ×1
guid ×1
migration ×1
php ×1
postgresql ×1
reset ×1
sql ×1
sql-server ×1
sqlite ×1
uuid ×1