假设我们有一个Product表,Order表和一个(联结表)ProductOrder.
ProductOrder将具有ProductID和OrderID.
在我们的大多数系统中,这些表还有一个名为ID的自动编号列.
放置主键(以及群集密钥)的最佳做法是什么?
我应该保留ID字段的主键并为外键对(ProductID和OrderID)创建非聚集索引
或者我应该放置外键对的主键(ProductID和OrderID)并在ID列上放置非聚集索引(如果需要的话)
或者......(你们其中一个人的聪明话:))
我只能找到以下两个不同之处:
当我们有ER图时,为什么我们使用关系模型?
database entity-relationship relational junction-table entity-relationship-model
这一直困扰着我,也许有人可以帮助澄清。
假设我有书和作者:一本书可以由许多作者写,而一个作者可以写很多书。
为什么我无法使用以下架构捕获此内容?为什么需要连接表?
图书 -------- 图书ID(PK) 作者 ID (PK) 书名
作者 -------- 作者 ID (PK) 作者姓名
我仍然是 PostgreSQL 的 NB - 任何人都可以帮助解决这个查询:
select distinct j.id, tt.title, m_scopus.provider_id
from journal j
join temporal_title "tt"
on (j.id = tt.journal_id and tt.list_index = 0)
left join journal_metrics "jm_scopus"
on (jm_scopus.journal_id = j.id)
left join metrics "m_scopus"
on (m_scopus.id = jm_scopus.metrics_id
and m_scopus.source_id = 235451508
and m_scopus.year_integer = 2017)
Run Code Online (Sandbox Code Playgroud)
问题是我得到了带有空“provider_id”的行,而我不想要它们:
journal_id title provider_id
263290036 German Journal of... scopusJournalsMetricsProvider
263290036 German Journal of... NULL
72418282 Europa azul NULL
207412571 IAC International... NULL
Run Code Online (Sandbox Code Playgroud)
第 1、3 和 4 行都可以,但第 2 行不行,因为我需要的信息是provider_id(如果存在),如果不存在则为 NULL。
我有以下表格.
文章表
a_id INT主要唯一
名称 VARCHAR
描述 VARCHAR
c_id INT
类别表
ID INT
cat_name VARCHAR
现在我只是使用
SELECT a_id,name,Description,cat_name FROM Articles LEFT JOIN Category ON Articles.a_id=Category.id WHERE c_id={$id}
这给了我所有属于某个类别的文章以及类别名称.
每篇文章只有一个类别.
我以类似的方式使用子类别(我有另一个名为sub_cat的表).
但是每篇文章都没有必要的子类别.它可能属于多个类别.
我现在想到标记一个包含多个类别的文章就像stackoverflow中的问题被标记一样(例如:有多个标签,如PHP,MYSQL,SQL等).
以后我必须显示(过滤)所有文章与某些标签(例如:标记为php,php + MySQL),我还必须显示标签以及文章名称,描述.
谁能帮我重新设计数据库?(我在后端使用php + MySQL)
mysql database database-design junction-table database-schema
将附加数据存储在我的联接/连接表中是否有任何缺点?
例如,我正在研究货运公司的数据库,并且有3个表:
Table 1 - company,
Table 2 - trailer_type,
Table 3 - junction_table,
Run Code Online (Sandbox Code Playgroud)
每个公司可以有多个拖车类型,但是我还需要每个公司每种拖车类型的拖车数量。放置拖车计数的最合理的方法似乎是在与company.id和trailer_type.id的连接表中。
这样做有什么弊端吗?如果有,有没有更好的方法呢?
关于Oracle SQL中的连接表的快速问题.我理解他们的功能和他们在"多对多"关系中的角色,但是"一对多"关系呢?我有两张桌子,Employees和Positions.每个员工只能持有一个职位,但每个职位可以有很多员工.例如,John Doe只能是销售主管,但公司有4名销售主管.这是我到目前为止编码的方式:
CREATE TABLE Positions (
position_id NUMBER(2) NOT NULL,
position_name VARCHAR2(25) NOT NULL,
CONSTRAINT pk_position PRIMARY KEY(position_id)
);
CREATE TABLE Employee (
emp_id NUMBER(3) NOT NULL,
emp_name VARCHAR2(30) NOT NULL,
emp_position NUMBER(2) NOT NULL,
emp_salary NUMBER(5) NOT NULL,
CONSTRAINT pk_employee PRIMARY KEY(emp_id),
CONSTRAINT fk_emp_pos FOREIGN KEY (emp_position)
REFERENCES Position(position_id)
);
CREATE TABLE pos_emp (
position_id NUMBER(2) NOT NULL,
emp_id NUMBER(3) NOT NULL,
CONSTRAINT pk_pos_emp PRIMARY KEY(position_id, emp_id)
);
Run Code Online (Sandbox Code Playgroud)
它是否正确?是否需要:
a.Employee表中的外键?
湾 联结表? …
我有三张桌子(这里有例子).两个有数据,一个是连接表来处理很多:很多关系.
用户:
ID | UserName
====================
1 | Jeremy Coulson
2 | Someone Else
Run Code Online (Sandbox Code Playgroud)
存储库:
ID | RepositoryURI
====================
1 | http://something
2 | http://another
Run Code Online (Sandbox Code Playgroud)
存储库用户:
ID | UserID | RepositoryID
==========================
1 | 1 | 1
2 | 2 | 2
Run Code Online (Sandbox Code Playgroud)
因此,在此示例中,用户1与存储库1相关联.用户2与存储库2相关联.我现在需要搜索Repositories.RepositoryURI并返回Users.UserName.
我有这个问题:
select UserName
from RepositoriesUsers
join Users on Users.ID = RepositoriesUsers.UserID
join Repositories on Repositories.RepositoryURI = 'http://another';
Run Code Online (Sandbox Code Playgroud)
但是,它返回表中的每一行RepositroriesUsers.
如何将联结表与ID和其他表之间的数据与人性化文本进行匹配?
我在数据库中有三个表:
trips(trip_id(pk), trip_name(unique), user_id(fk))
places(place_id(pk), place_name(unique))
trips_places_asc(trip_id(fk), place_id(fk))
Run Code Online (Sandbox Code Playgroud)
因为,许多旅行可以有很多地方,我有一个如上所述的联结表.
现在,如果用户在旅行中插入地点,则会将地点添加到places表格中,并且旅行将与trips_places_asc表格中的地点相关联.
所以,如果我写的查询如下:
INSERT INTO places (place_name)
VALUES ('XYZ')
INSERT INTO trips (trip_name)
VALUES ('MyTrip')
Run Code Online (Sandbox Code Playgroud)
然后,如何存储trip_id和place_id在Junction或Association表中trips_places_asc?我必须解雇两个问题吗?请帮助.
sql ×5
database ×4
mysql ×3
join ×1
left-join ×1
many-to-many ×1
oracle ×1
php ×1
postgresql ×1
relational ×1
sql-server ×1