Bool 字段可以成为唯一索引并与另一个表的索引一起用于外键关系吗?
我不认为它可以成为主键,但唯一索引呢?每次我尝试将其转换为唯一索引时,它都会将其转换为 tinyint。
编辑
所以我有一个SQL关系问题。假设我有一个数据库,我想在其中保存有关个人的信息记录。现在我已经设置了一个表格来处理这些信息。好的到目前为止一切顺利。
通常可以在表中发现重复信息并将其删除。如果特定字段与另一行中的另一个字段具有相同的值,则记录被视为重复。示例:重复的电子邮件。
现在我想在数据库中创建另一个表来跟踪发现和删除的每个重复项。我对此的第一个想法是创建外键关系。所以我创建了一个dupes表,然后将其连接到我的persons表。这种关系是一个简单的外键到主键的关系,带有删除约束。
现在虽然这可能一开始有用,但问题出现了,dupes 表正在接收被删除的记录,即使它们没有被删除,因为它们是被欺骗的。这是一个问题,因为即使我决定从persons表中删除一个人只是因为我不喜欢他们,他们还是会存储在dupes表中。
然后我想,为什么不在 people 表中创建一个处置字段并将其作为唯一键或主键连接到我的 dupes 表的索引外键。那么问题是一个唯一的键必须有一个唯一的值,所以欺骗的多重处置或者我不喜欢你不会工作。另一种选择是使处置字段成为主键。不过也有同样的问题。
这个问题的正确关系是什么?
我有三张桌子 -
file (
file_id int primary key
filename text not null
etc...
)
product (
product_id int primary key
etc....
)
product_attachment (
product_id references product
file_id references file
)
Run Code Online (Sandbox Code Playgroud)
我想确保当这些是自然连接时,product_id + 文件名是唯一的。到目前为止,我拥有的最佳解决方案是将文件名添加到 product_attachment 表中,但我想知道是否有办法避免这种情况。
最近,我一直在尝试在表中添加以下外键,在 Oracle 中使用 RESTRICT 子句使用以下命令。:
ALTER TABLE
Employee_SalHead
ADD CONSTRAINT PAYROLL_SHEAD_FKEY FOREIGN KEY
(
SalHead_ID
)
REFERENCES SalHead
(
SalHead_ID
)
ON DELETE RESTRICT ENABLE;
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
错误从命令中的第 11 行开始 - ALTER TABLE Employee_SalHead ADD CONSTRAINT PAYROLL_SHEAD_FKEY FOREIGN KEY (SalHead_ID) REFERENCES SalHead (SalHead_ID) ON DELETE RESTRICT ENABLE 错误报告 - SQL 错误:ORA-009009005 关键字“丢失”关键字 *000000000005原因:
*动作:
此外,如果我通过 Oracle SQL 开发人员尝试相同的操作,我只会得到选项 Set Null、Cascade 和 No Action Only。
我需要基于一组字段获取单个模型对象,其中一个是ForeignKey. 所以如果我有以下模型:
class Composer(models.Model):
name = models.CharField()
dates = models.CharField()
nationality = models.CharField()
period = models.CharField()
class Symphony(models.Model):
composer = models.ForeignKey('Composer', related_name="symphonies", null=True)
date = models.CharField()
key = models.CharField()
number = models.IntegerField()
num_movements = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
然后如何Symphony根据其composer和number字段检索特定对象?我最初将 composer 作为一个 simple models.CharField(),所以我可以这样做:
Symphony.objects.get(composer='Bruckner', number=7)
Run Code Online (Sandbox Code Playgroud)
那么我如何使用 a 做等效的事情ForeignKey?
我有两个表 A 和 B,在 B 中有一个来自 A 的外键,我想要做的是从 A 中删除它们在 B 中没有出现的所有行,我执行以下查询,但它是不工作:
DELETE from A
WHERE id_A
not in (select DISTINCT(foreign_key_of_A_in_B) from B)
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
我有两张桌子,一张代金券和一张订单。凭证需要有16个字符串作为ID,随机创建。当 ID 作为整数递增时一切正常,但是当更改为字符串时,我无法让它添加外键,出现此错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `orders` add constraint `orders_voucher_id_foreign` foreign k
ey (`voucher_id`) references `vouchers` (`id`))
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
Run Code Online (Sandbox Code Playgroud)
这是我的表:
Schema::create('vouchers', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->string('id');
$table->integer('value');
$table->string('status');
$table->timestamps();
});
Schema::create('orders', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('event_id')->unsigned();
$table->string('voucher_id');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('event_id')->references('id')->on('events');
$table->foreign('voucher_id')->references('id')->on('vouchers');
});
Run Code Online (Sandbox Code Playgroud)
任何反馈将不胜感激。提前致谢。
我想将其中一个表中的一列更改为引用另一个表中的另一列。我尝试通过以下方式引入外键:
ALTER TABLE `table` ALTER COLUMN `id_l` int NOT NULL,外键 (`id_l`) 引用 table_b(`id_l`);
ALTER TABLE `table` CHANGE `id_l` `id_l` int NOT NULL,外键 (`id_l`) 引用 table_b(`id_l`);
我被抛出一个语法错误。
一种解决方法是删除该表并创建一个具有所需引用的新表(这有效),但我想按原样更改该表,而不是传输数据。我该怎么做呢?
MySQL 服务器 5.6.17
我在 PowerBI 中有两个来自 Azure SQL 的表,使用直接查询:
EMP(empID PK)contactInfo(contactID PK, empID FK, contactDetail)从EMP.empID到有明显的一对多关系contactInfo.empID。外键约束已成功实施。
但是,我只能在 PowerBI 中创建多对一关系 ( contactInfo.empIDto EMP.empID)。如果我尝试相反的方法,PowerBI 总是会自动将关系转换为多对一(通过交换 from 和 to 列),这会阻止我创建视觉效果。PowerBI 是否认为两者是等价的?
更新:
我所做的只是在 PowerBI 中创建一个表,显示这两个表的连接结果。外键约束是contactInfo.empID REFERENCES EMP.empID,它是多对一的。我想这应该不是问题,因为我可以使用 SQL 直接查询连接。
还请建议我是否应该在相反的方向创建外键。
有关创建视觉失败的更多信息
确切的错误消息是:
Can't display the data because Power BI can't determine
the relationship between two or more fields.
Version: 2.43.4647.541 (PBIDesktop)
Run Code Online (Sandbox Code Playgroud)
要重现错误:
数据库架构如下:
我想要的是 PowerBI 中的一个表,显示员工的联系方式和销售信息,即加入所有四个表。当表视觉对象的 VALUES 包含“empName、contactDetail、contactType、productName”时会发生错误,但是,如果我只包含“empName、contactDetail、contactType”或“empName、productName”,则不会发生错误。起初我以为问题可能出在contactInfo和emp之间的关系上,但现在似乎更复杂了。我猜这可能是由多个一对多关系引起的?
我深深地陷入了一个在我看来应该很简单的belongs_to 关系上。
如果我在从票证到帐户的迁移中创建数据库关联,则会在票证表上创建一个名为“account_id”的数据库字段,这很好。然后在我的 Ticket 模型中,我输入了:
belongs_to :created_by, class_name: 'Account'
Run Code Online (Sandbox Code Playgroud)
但是从 rails 5 开始,belongs_to 关系会自动添加对 account_id 要求是否存在的验证。但是,如果我传入 created_by,则验证失败。因为我想验证 created_by 而不是 account_id 的存在。所以我添加了可选的:true 标签
belongs_to :created_by, class_name: 'Account', optional: true
Run Code Online (Sandbox Code Playgroud)
然后分别验证 created by 的存在
validates_presence_of :created_by
Run Code Online (Sandbox Code Playgroud)
这一切都有效,但我不喜欢我自相矛盾地说可选,然后在一行之后验证它是真正相同的领域!
然后我开始思考如果tickets 表上的数据库中的字段实际上被称为created_by 并且使用一些主键和外键的东西我建立的关系它应该修复它吗?
但是我不确定如何构建迁移,然后不确定如何编写belongs_to。我试过:
add_column :tickets, :created_by, :bigint
add_index :tickets, :created_by
Run Code Online (Sandbox Code Playgroud)
和
belongs_to :created_by, class_name: 'Account', foreign_key: :created_by, primary_key: :account_id
Run Code Online (Sandbox Code Playgroud)
但这完全失败了,但是如果我这样做
belongs_to :account, foreign_key: :created_by
Run Code Online (Sandbox Code Playgroud)
这使我能够使用 account_id 为 1 来更新 created_by,但是如果我运行,ticket.created_by我会得到 int 并ticket.account返回该帐户。我希望这是相反的。
这可能很容易解决。我创建了一个使用 forms.ModelForm 的表单。我的模型有 ForeignKey 字段。表单为外键创建了一个选择字段,但没有正确显示值。
模型.py
from django.db import models
# Create your models here.
class Gender(models.Model):
name = models.CharField(max_length=8, null=True)
class Meta:
db_table='gender'
class UserExample(models.Model):
name = models.CharField(max_length=16,null=True)
age = models.IntegerField(blank=True, null=True)
gender = models.ForeignKey('Gender', on_delete=models.SET_NULL, null=True)
class Meta:
db_table='userExample'
def __str__(self):
return ""
Run Code Online (Sandbox Code Playgroud)
表格.py
from django import forms
from .models import UserExample, Gender
class UserForm(forms.ModelForm):
class Meta:
model = UserExample
fields = ('name', 'age', 'gender')
Run Code Online (Sandbox Code Playgroud)
视图.py
from django.shortcuts import render
from .forms import UserForm
# Create your views …Run Code Online (Sandbox Code Playgroud) foreign-keys ×10
mysql ×4
sql ×3
django ×2
activerecord ×1
eloquent ×1
forms ×1
laravel ×1
oracle ×1
php ×1
postgresql ×1
powerbi ×1
python ×1
relationship ×1
sql-delete ×1