由于几个我无权谈论的原因,我们在Sql Server 2005数据库中定义了一个视图,如下所示:
CREATE VIEW [dbo].[MeterProvingStatisticsPoint]
AS
SELECT
CAST(0 AS BIGINT) AS 'RowNumber',
CAST(0 AS BIGINT) AS 'ProverTicketId',
CAST(0 AS INT) AS 'ReportNumber',
GETDATE() AS 'CompletedDateTime',
CAST(1.1 AS float) AS 'MeterFactor',
CAST(1.1 AS float) AS 'Density',
CAST(1.1 AS float) AS 'FlowRate',
CAST(1.1 AS float) AS 'Average',
CAST(1.1 AS float) AS 'StandardDeviation',
CAST(1.1 AS float) AS 'MeanPlus2XStandardDeviation',
CAST(1.1 AS float) AS 'MeanMinus2XStandardDeviation'
WHERE 0 = 1
Run Code Online (Sandbox Code Playgroud)
我们的想法是,实体框架将基于此查询创建一个实体,但它会生成一个包含以下内容的错误:
警告6002:表/视图'Keystone_Local.dbo.MeterProvingStatisticsPoint'没有定义主键.已推断密钥,并将定义创建为只读表/视图.
并且它决定CompletedDateTime字段将是此实体主键.
我们正在使用EdmGen生成模型.有没有办法不让实体框架包含此视图的任何字段作为主键?
entity-framework sql-server-2005 primary-key .net-3.5 sql-view
当一个整数列在SQLite表中被标记为主键时,是否应该为它显式创建索引?SQLite似乎不会自动为主键列创建索引,但考虑到其目的,它可能无论如何都要对其进行索引?(我会一直在搜索那个专栏).
对于字符串主键,情况会有所不同吗?
在阅读此问题中的评论后,会出现此问题:
创建多对多表时,应该在两个外键列上创建复合主键,还是创建自动增量代理"ID"主键,并将索引放在两个FK列上(也许一个独特的约束)?在每种情况下插入新记录/重新索引对性能有何影响?
基本上,这个:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
Run Code Online (Sandbox Code Playgroud)
与此:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
Run Code Online (Sandbox Code Playgroud)
评论者说:
使两个ID成为PK意味着表按照该顺序在磁盘上进行物理排序.因此,如果我们插入(Part1/Device1),(Part1/Device2),(Part2/Device3),然后(Part1/Device3),数据库必须将表拆开并在条目2和3之间插入最后一个.许多记录,这变得非常有问题,因为它涉及每次添加一个数据,数千或数百万条记录.相比之下,自动增量PK允许将新记录添加到最后.
我问的原因是因为我一直倾向于使用没有代理自动增量列的复合主键,但我不确定代理键是否实际上更具性能.
我们使用UUID作为oracle DB的主键,并尝试确定VARCHAR的适当最大字符长度.显然这是36个字符,但我们注意到UUID'生成的长度比这长 - 最多60个字符.有没有人知道UUID的合适最大字符长度?
假设我在数据库集中有一个ID行(int)作为主键.如果我经常查询ID,我还需要索引吗?或者它是否是主键意味着它已被索引?
我问的原因是因为在MS SQL Server中我可以在这个ID上创建一个索引,正如我所说的那样是我的主键.
编辑:一个额外的问题 - 额外索引主键会不会有任何损害?
这个例子来自w3schools.
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Run Code Online (Sandbox Code Playgroud)
我的理解是两个列在一起(P_Id和LastName)代表表的主键Persons.它是否正确?
ddl database-design primary-key relational-database database-table
如何在SQL中定义由两个字段组成的复合主键?
我正在使用PHP来创建表和一切.我想打一个表名voting与领域QuestionID,MemeberID和vote.Composite主键由字段QuestionID和MemberID.
我该怎么做?
我有一个user_interactions有4列的表:
user_1
user_2
type
timestamp
Run Code Online (Sandbox Code Playgroud)
主键是(user_1,user_2,type)
,我想改为(user_2,user_1,type)
所以我做的是:
drop primary key ...
add primary key (user_2,user_1,type)...
Run Code Online (Sandbox Code Playgroud)
瞧...
问题是数据库在服务器上是活的.
因此,在我更新主键之前,许多重复项已经悄悄进入,并且它们不断涌入.
该怎么办?
我现在要做的是删除重复项并保留最新的重复项timestamp(这是表中的一列).
然后以某种方式再次更新主键.
我在我的项目中添加了一个新的ADO.Net实体数据模型,并使用更新向导将表添加到模型中.五个选定的表被添加到设计图面.另外两个表不会添加.我在向导中选择它们并单击"完成",但它们从未出现在设计图面上.
这是一个错误,还是有些情况下表格无法添加到模型中(按设计)?
更新:XML(*.edmx)揭示了问题.
<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not
have a primary key defined and no valid primary key could be inferred.
This table/view has been excluded. To use the entity you will need to
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
<Property Name="role_id" Type="decimal" />
<Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->
Run Code Online (Sandbox Code Playgroud)
感谢克雷格您的答复.
.net ado.net entity-framework primary-key visual-studio-2008
我必须在数据库员工下有两个表,即employees_ce和employees_sn.
它们都有各自独特的主键列.
我有另一个名为deductions的表,其外键列我想引用employees_ce的主键以及employees_sn.这可能吗?
例如
employees_ce
--------------
empid name
khce1 prince
employees_sn
----------------
empid name
khsn1 princess
Run Code Online (Sandbox Code Playgroud)
这可能吗?
deductions
--------------
id name
khce1 gold
khsn1 silver
Run Code Online (Sandbox Code Playgroud) primary-key ×10
sql ×3
indexing ×2
.net ×1
.net-3.5 ×1
ado.net ×1
ddl ×1
foreign-keys ×1
many-to-many ×1
mysql ×1
sql-server ×1
sql-view ×1
sqlite ×1
t-sql ×1
uuid ×1