在SQL中,表中的单个列可以引用多个表吗?
例如,如果我们有表employee(PK emp_id, name) 和customer(PK cust_id, name)
我们可以有一张桌子吗contact(id 参考文献[employee, customer], number);
或者我们是否需要制作两张表:
contact_cust(cust_id参考文献customer, number)和contact_emp(emp_id参考文献employee, number)
我知道即使第一个选择可行,第二个选择也会更好。我只想知道第一种方法可行吗?
我有两个通过外键约束链接的表。我想更改 ID 字段,但由于外键约束,以下代码失败:
UPDATE A SET id = 1479 WHERE id = 2103;
UPDATE B SET Aid = 1479 WHERE Aid = 2103;
Run Code Online (Sandbox Code Playgroud)
我知道我可以设置ON CASCADE自动执行此操作,但是如何根据具体情况执行此操作?
当我将 DUMP 导入 SQlite3 数据库时,我必须手动再次激活foreign_keys。
PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)
创建转储时,转储如下所示:
PRAGMA foreign_keys = OFF;
BEGIN TRANSACTION;
[...]
COMMIT;
Run Code Online (Sandbox Code Playgroud)
当我手动添加激活命令时,它会被忽略:
PRAGMA foreign_keys = OFF;
BEGIN TRANSACTION;
[...]
COMMIT;
PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)
有没有办法在导入转储时自动重新激活外键?
我刚刚开始在 Android 应用程序中使用 SQLite 数据库。我正在尝试创建一个“团队”表和一个“玩家”表,并且我希望“玩家”表有一个外键,该外键引用“团队”表的自动增量 _ID 字段(我认为这个 _ID 字段来自在我的合同类中实现 BaseColumns)。我认为我的语法正确,但出现以下错误(即使在卸载并重新安装我的应用程序之后)
06-08 20:26:22.763: E/Database(29843): Failure 1 (near "playerName": syntax error) on 0x22a110 when preparing 'CREATE TABLE player (_id INTEGER PRIMARY KEY,team_ID INTEGER, FOREIGN KEY(team_ID) REFERENCES team(_id), playerName TEXT,playerAge INTEGER,playerPosition TEXT,playerHeight REAL,playerWeight REAL,playerPhoto TEXT,playerNumber INTEGER)'.
Run Code Online (Sandbox Code Playgroud)
上面的错误显示了最终尝试执行的 SQL 语句。这是生成 SQL 语句的代码(抱歉,它没有必要啰嗦,我正在学习教程):
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "
+ TeamTable.TABLE_NAME + " (" + TeamTable._ID
+ " INTEGER PRIMARY KEY," + TeamTable.COLUMN_NAME_TEAM_NAME
+ TEXT_TYPE + COMMA_SEP + TeamTable.COLUMN_NAME_TEAM_WINS
+ TEXT_TYPE + …Run Code Online (Sandbox Code Playgroud) 那些天我正在学习 Ruby on Rails,以提高自己作为一名开发人员的水平,因此我开始重写我的一个 php 网站来使用该框架。
基本上该网站是一个源代码聚合器,因此我有一个语言模型和一个源模型:
class Language < ActiveRecord::Base
has_many :sources
end
class Source < ActiveRecord::Base
belongs_to :language
end
Run Code Online (Sandbox Code Playgroud)
与源表中的 language_id 外键绑定。
该网站的主要路线之一是:
get ':language_name/:source_name.html' => 'source#show'
Run Code Online (Sandbox Code Playgroud)
例如:
/ruby/discover-if-a-number-is-prime.html
Run Code Online (Sandbox Code Playgroud)
在 SourceController 中我声明了以下内容:
class SourceController < ApplicationController
def show
language_name, source_name = params[:language_name], params[:source_name]
@language = Language.find_by_name(language_name) || not_found
@source = Source.find_by( name: source_name, language_id: @language.id ) || not_found
end
end
Run Code Online (Sandbox Code Playgroud)
有没有一种聪明的方法来执行这两个查询?
也许像
@source = Source.find_by_name_and_language_name( source_name, language_name ) || not_found
Run Code Online (Sandbox Code Playgroud)
如果这是一个愚蠢的问题,我很抱歉,我也在阅读《Agile Web Development with Rails 3.2》,但与此同时我想尝试一下。
谢谢
我正在用 PHP/MySQL 做我的第一份工作,我需要帮助。我有一张主表:
CREATE TABLE `m4l_movies` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Title` varchar(250) NOT NULL,
`Rating` int(11) NOT NULL,
`Genre` varchar(250) NOT NULL,
`Actors` varchar(250) NOT NULL,
`UserID` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=115 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
接收表单的输入,该表单具有来自这些查找表的值:
CREATE TABLE `m4l_actors` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Actor` varchar(255) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=232 DEFAULT CHARSET=utf8;
CREATE TABLE `m4l_genre` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Genre` varchar(255) NOT NULL,
PRIMARY KEY (`ID`) …Run Code Online (Sandbox Code Playgroud) 我可以定义指向视图的外键(在 SQLite 3.8.2 中)吗?
我的情况是:我有一个项目清单;每个项目都有特定的类型;每种类型都有一个插槽(属性)列表:
create table "type" ("type id" integer primary key);
create table "slot" (
"slot id" integer primary key,
"type id" integer not null
references "type" ("type id") on update cascade on delete cascade);
create table "item" (
"item id" integer primary key
"type id" integer not null
references "type" ("type id") on update cascade on delete cascade);
Run Code Online (Sandbox Code Playgroud)
现在我想写一个更改日志:项目A,插槽B,值X:
create table "change" (
"item id" integer not null
references "item" ("item …Run Code Online (Sandbox Code Playgroud) 外键字段的名称是否可以与其在其他表中引用的字段的名称不同?如果是,它如何引用另一个表?
我有一个表,用于映射其他两个表的两个主键。我将这两个字段作为外键。映射表没有主键 当我尝试插入两个表中已有的 2 个值时,出现Cannot add or update a child row: aforeign key constraintfail错误。我该如何解决这个问题?
我的表是这样的:
CREATE TABLE IF NOT EXISTS fuse_package_component_members
( component_id int(11) NOT NULL,
member_type int(11) NOT NULL,
member_id int(11) NOT NULL,
active_date date NOT NULL,
inactive_date date NOT NULL,
KEY component_id (component_id),
KEY member_id (member_id) )
ENGINE=InnoDB DEFAULT CHARSET=latin1
ALTER TABLE fuse_package_component_members
ADD CONSTRAINT comp_id_fk
FOREIGN KEY (component_id) REFERENCES fuse_component_definition (component_id) ON UPDATE NO ACTION,
ADD CONSTRAINT ele_id_fk
FOREIGN KEY (member_id) REFERENCES fuse_product_element …Run Code Online (Sandbox Code Playgroud) 我正在制作一个连接表。我希望它有 2 个单独的外键,引用 2 个单独表中的 ID。
create table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric references books (id) NOT NULL,
user_id numeric NOT NULL references user (id),
checked bool,
);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ERROR: syntax error at or near "user"
LINE 4: user_id numeric NOT NULL references user (id),
^
********** Error **********
ERROR: syntax error at or near "user"
SQL state: 42601
Character: 202
Run Code Online (Sandbox Code Playgroud)
Postgres 是否不允许来自两个单独表的 2 个外键?
我也尝试过:
create table user_book (
id serial primary …Run Code Online (Sandbox Code Playgroud) foreign-keys ×10
sqlite ×4
mysql ×3
database ×2
sql ×2
android ×1
ddl ×1
dump ×1
postgresql ×1
ruby ×1
syntax-error ×1