小编Tom*_*m H的帖子

NM关系中的复合主键与否?

假设我们有3个表(实际上我目前有2个表,但这个例子可能更好地说明了这个想法):

[人]

  • ID:int,主键
  • 名称:nvarchar(xx)

[组]

  • ID:int,主键
  • 名称:nvarchar(xx)

[角色]

  • ID:int,主键
  • 名称:nvarchar(xx)

[PersonGroupRole]

  • Person_ID:int,PRIMARY COMPOSITE OR NOT?
  • Group_ID:int,PRIMARY COMPOSITE OR NOT?
  • Role_ID:int,PRIMARY COMPOSITE OR NOT?

如果PersonGroupRole关系中的3个ID中的任何一个被标记为PRIMARY键,还是它们都应该被合并为一个复合词?这样做的真正好处是什么?

据我所知,我可以加入,所以Person JOIN PersonGroupRole JOIN Group给了我哪些人在哪些组等.

我将在SQL-express和SQL-server之上使用LINQ/C#/ .NET,因此如果有任何关于语言/ SQL的原因可能会使选择更加明确,那就是我要求的平台.

期待看到弹出的答案,因为我在组合时会多次考虑这些主键/索引.

编辑:

好吧,问题是被误解我现在可以看到.

问题在于,如果将PersonGroupRole中的三个ID标记为PRIMARY KEYS用于索引目的是有意义的.这是否会为加入三个表中的每个表增加额外的速度,或者它们是否应该在PersonGroupRole表中没有PRIMARY KEY且在单独的表中只是Primary.

对不起,关于混乱.将尝试更好地解释我的问题.

sql sql-server query-optimization linq-to-sql

2
推荐指数
1
解决办法
1183
查看次数

SQL高分

好的,我有两个MYSQL表:

CREATE TABLE `sessions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userID` int(11) NOT NULL,
  `runTime` int(11) NOT NULL,
  `monstersKilled` int(11) NOT NULL,
  `profit` int(11) NOT NULL,
  `tasks` int(11) NOT NULL,
  `xpGain` int(11) NOT NULL,
  `lastupdate` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);
Run Code Online (Sandbox Code Playgroud)

和,

CREATE TABLE  `users` (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `user` text NOT NULL,
  `pass` text NOT NULL,
  `paypal` text NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  `strikes` int(11) NOT NULL DEFAULT '0',
  `session` text NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

php mysql sql aggregate-functions

2
推荐指数
1
解决办法
533
查看次数

SQL日期比较

如何检查记录的时间戳日期是否在今天午夜之前?

约瑟夫让我疯了......

sql t-sql

1
推荐指数
1
解决办法
1719
查看次数

sql server表快速加载不是

我继承了一个SSIS包,它将500K行(大约30列)加载到一个临时表中.

现在已经烹饪了大约120分钟并且没有完成 - 这表明它的运行速度低于每秒70行.我知道每个人的环境都不一样,但我认为这与"典型"的情况相差几个数量级.

奇怪的是,登台表在INT(标识)列上有一个PK约束 - 现在我认为它可能会妨碍负载性能.登台表上没有其他约束,索引或触发器.

有什么建议?

----附加信息------
源是一个制表符分隔文件,它连接到两个单独的数据流组件,这些组件将一些静态数据(运行日期和批处理ID)添加到流中,然后连接到OLE DB目标适配器

访问模式是使用FastLoad的OpenRowset

FastLoadOptions是TABLOCK,CHECK_CONSTRAINTS

最大插入提交大小:0

sql-server ssis

1
推荐指数
1
解决办法
3362
查看次数

SQL优化问题(oracle)

编辑:请回答我问的两个答案中的一个.我知道在不同情况下还有其他选择会更好.这些其他可能的选项(对表进行分区,作为一个大型删除语句运行,无需批量提交等)在我的情况下不是选项,因为我无法控制.

我有几个非常大的表要删除.所有都具有索引的相同外键.我需要从所有表中删除某些记录.

table source
  id --primary_key
  import_source --used for choosing the ids to delete

table t1
  id --foreign key
  --other fields

table t2
  id --foreign key
  --different other fields
Run Code Online (Sandbox Code Playgroud)

通常在执行这样的删除时,我会组合一个循环来逐步执行所有ID:

declare
my_counter integer := 0;
begin
for cur in (
select id from source where import_source = 'bad.txt'
) loop
  begin
    delete from source where id = cur.id;
    delete from t1 where id = cur.id;
    delete from t2 where id = cur.id;
    my_counter := my_counter + …
Run Code Online (Sandbox Code Playgroud)

sql oracle optimization

1
推荐指数
2
解决办法
743
查看次数

从SQL中的逗号分隔值中获取第一个或第二个值

我有一个存储数据的列(42,12).现在我想获取42或12(两个不同的选择查询).我搜索并发现了一些类似但更复杂的场景.这有什么简单的方法吗?我正在使用MSSQL Server 2005.

鉴于总会有两个值,它们将是整数

sql sql-server

1
推荐指数
2
解决办法
9696
查看次数

sql运算符相当于!=

我想选择某个列不是我指定的值的所有字段.

我尝试了这个,但它没有用.

SELECT * 
FROM table 
WHERE columnname != value
Run Code Online (Sandbox Code Playgroud)

我的错.

这是另一个错误,所以我认为!=操作员错了,因为这是我第一次使用它.对不起大家!

mysql sql

1
推荐指数
2
解决办法
246
查看次数

在SQL WHERE中执行IF

我想做这个

SELECT *
  FROM sales_order_header       
 WHERE order_reference LIKE @order_reference + '%'
   AND ((@booked_in IS NULL) OR ( booked_in = @booked_in))
   AND ((@depot_assigned IS NULL) OR ( IF @depot_assigned = 'Y' depot_code <> ' ' ELSE depot_code = ' ') )
Run Code Online (Sandbox Code Playgroud)

我相信你们都可以猜到OR(IF @dede_assigned等)位失败了.

我该怎么做这样的事情,或者我必须根据@depot_assigned参数的值将它作为两个单独的select语句来完成.

sql sql-server

1
推荐指数
1
解决办法
118
查看次数

SQL插入字段,带有其他自动增量字段+值的值

听起来可能很复杂,但事实并非如此.我有一个名为"orders"的表,其中包含以下字段:

id INT(11) auto_increment,
realid INT(14)
Run Code Online (Sandbox Code Playgroud)

现在,我希望在每个插入到此表中,执行以下操作:

INSERT INTO orders VALUES (null, id+1000);
Run Code Online (Sandbox Code Playgroud)

但是我会在目前在线的商店里做这件事,我想在5分钟内改变一切.这样的事情会起作用吗?如果没有,我该怎么做?

php sql auto-increment

1
推荐指数
1
解决办法
344
查看次数

外键为空-性能下降

我有一个表文件夹,如果该文件夹具有父级,则该列的parent_id引用ID,如果没有,则parent_id为null。那是好的解决方案,还是该连接或其他解决方案需要额外的表?外键可以根本为null吗,如果可以,此解决方案将有更大的执行时间?

table folder(
   id int primary key,            //primary key in my table
   parent_id int references id,   //foreign key on id column in same table
....
)
Run Code Online (Sandbox Code Playgroud)

mysql sql foreign-keys

1
推荐指数
1
解决办法
1958
查看次数