这是我正在使用的激烈设置的粗略过度简化.table_1并且table_2两者都有自动增加代理主键作为ID.info是一个包含有关table_1和的信息的表table_2.
table_1 (id, field)
table_2 (id, field, field)
info ( ???, field)
Run Code Online (Sandbox Code Playgroud)
我试图决定,如果我应该做的主键info的ID从复合材料table_1和table_2.如果我这样做,哪一个最有意义呢?
(在这个例子中,我将ID 11209与ID 437相结合)
INT(9)11209437 (我可以想象为什么这很糟糕)
VARCHAR (10) 11209-437
DECIMAL (10,4)11209.437
或者是其他东西?
将它用作MYSQL MYISAM数据库的主键可以吗?
mysql myisam primary-key composite-key composite-primary-key
我一直在为在线商店系统设计数据库.通过阅读本网站上的一些帖子,我遇到的问题是,虽然我可以使用复合主键,但我会在下面解释一下,这是不是很糟糕的做法(根据我在这方面阅读的帖子)在stackoveflow上,很多人说这是一个不好的做法所以这就是我要问的原因.
我想在单独的表格中存储订单付款.原因在于,订单可以包含许多项目,这些项目以多对多关系的形式在单独的表格中处理.现在,如果我不使用复合主键作为我的付款表,我将失去我的独特性PaymentID:
[PaymentId] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[OrderId] INT NOT NULL PRIMARY KEY --Also a Foreign Key--
Run Code Online (Sandbox Code Playgroud)
现在,如果我只删除主键OrderId,我会在这里丢失我的一对一关系Many OrderIds can be associated to many PaymentIds,我不想要这个.
这就是为什么这里先前提出的问题已经(大多数时候)得出结论,复合键是一个坏主意.所以我想为自己澄清一下; 如果不好,那么最佳做法是什么?
我正在编写一个迁移脚本来创建一个表,其中包含一个名为的主键列,guid并且是一个VARCHAR(25).问题是我觉得我必须加倍努力才能一步到位才能实现目标.
如果我跑:
create_table(:global_feeds, :primary_key => 'guid') do |t|
t.string :guid, :limit => 25
t.text :title
t.text :subtitle
...
t.timestamps
end
Run Code Online (Sandbox Code Playgroud)
我得到一个表,其中一个名为guidno column 的主键被调用id(这就是我想要的).但是,问题是guid列是INT(11)打开自动增量的.所以我必须运行一个额外的命令:
change_column :global_feeds, :guid, :string, :limit => 25
Run Code Online (Sandbox Code Playgroud)
似乎有点费解,基本上必须运行两个SQL命令才能获得我认为应该可以在一个中执行的操作.
关于如何优化这个的任何建议?
我在没有rails的ruby项目中使用ActiveRecord.我需要为表定义复合主键.通常,迁移会自动创建主键.是否可以使用活动记录为表定义自己的复合主键?
我正在尝试使用http://compositekeys.rubyforge.org/,以便在我的activerecord模型中使用复合主键.
我已经添加gem 'composite_primary_keys', '=3.1.0'到我的Gemfile中了.现在我尝试按如下方式设置我的第一个模型类.
class StringProperty < ActiveRecord::Base
self.primary_keys :entity_id, :property_id
set_table_name "problem.string_property"
attr_accessible :entity_id, :property_id, :value
end
Run Code Online (Sandbox Code Playgroud)
但我得到的只是:

我究竟做错了什么?:(
mysql ×2
ruby ×2
activerecord ×1
database ×1
migration ×1
myisam ×1
optimization ×1
primary-key ×1
rubygems ×1
sql ×1