- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的数据模型中,我有一个实体组和另一个GroupMember
实体。一个Nhóm
包含一个或多个GroupMembers
,但一个GroupMember
只能同时位于一个Nhóm
中。到目前为止没有问题,在数据库中GroupMember
有一个指向Nhóm
的id的外键,但是现在我想让其中一个成员成为“默认”或“选定”成员。应该始终只有一个选定的成员不多也不少。
我尝试在实体框架中对此进行建模,其中一个1-*关联用于建模组成员关系,另一个(0..1)-1关系用于在GroupMember
中保存所选Nhóm
的实例。
但是,现在我显然遇到了这样的问题,即在插入Nhóm
VàGroupMember
的实例时,会遇到一个错误,即实体框架不能确定插入项目的顺序,因为Nhóm
需要一个有效的GroupMember
作为默认成员,但是除非引用现有的GroupMember
实体,否则不能插入Nhóm
。一个鸡蛋问题,所以说…
最简单的方法可能是选择性地创建一个关系,但这将删除我希望在正常数据库操作期间具有的约束。理想情况下,实体框架应该以任何顺序将数据插入数据库,数据库应该只在事务结束时检查约束冲突。
另一种方法是将所选成员建模为groupmember中的布尔属性“isselected”。但是,我不确定如何确保只有一个选定的成员同时使用实体框架设计器(我想避免直接使用数据库)。
你能提供一些指导吗?处理这个问题的最佳方法是什么?谢谢!
câu trả lời hay nhất
正确的建模方法是使用association table:
+-------+ +--------+ +--------+
| Group |--------------| Member |-----------------| Person |
+-------+ 1 * +--------+ 1 1 +--------+
| 1 | 1
| |
| |
| 0..1 |
+--------+ |
| Leader |--------------------------------------------+
+--------+ 0..1
CREATE TABLE Group
(
Id int NOT NULL PRIMARY KEY,
...
)
CREATE TABLE Person
(
Id int NOT NULL PRIMARY KEY,
...
)
CREATE TABLE Member
(
PersonId int NOT NULL PRIMARY KEY
CONSTRAINT FK_Member_Person FOREIGN KEY REFERENCES Person (Id)
ON UPDATE CASCADE ON DELETE CASCADE,
GroupId int NOT NULL
CONSTRAINT FK_Member_Group FOREIGN KEY REFERENCES Group (Id)
ON UPDATE CASCADE ON DELETE CASCADE
)
CREATE INDEX IX_Member_Group ON Member (GroupId)
CREATE TABLE Leader
(
PersonId int NOT NULL PRIMARY KEY
CONSTRAINT FK_Leader_Person FOREIGN KEY REFERENCES Person (Id)
ON UPDATE CASCADE ON DELETE CASCADE,
GroupId int NOT NULL
CONSTRAINT FK_Leader_Group FOREIGN KEY REFERENCES Group (Id)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT U_Member_Group UNIQUE (GroupId)
)
CẬP NHẬT
语句。
CẬP NHẬT
设置为
GroupId
Và
Người
设置为
LeaderId
将导致无法解决的循环,除非将至少一列设置为空。您也将无法
Nhóm
其中一个关系。
CASCADE
设置为
GroupId
且另一个
Người
设置为
IsLeader
则不允许您在没有触发器的情况下强制执行上限(每组一个领导者)。实际上,从技术上讲,你可以使用过滤索引(仅限SQL'08),但它仍然是错误的,因为
Người
位实际上并不指定关系,如果你意外地更新了
IsLeader
但忘记了
GroupId
,那么你突然让这个人成为一个完全不同的组的领导者,可能违反了最多一个约束。
IsLeader
thêm vào
GroupId
中,但仍保留
Người
关联表。从概念上来说,这是一个更好的设计,但是由于您可能会有一个
Leader
从一个组到另一个人,您将无法在leader上也放置一个双向
CASCADE
(如果您尝试,您将得到“多重级联路径”错误)。
关于c# - 使用数据库中的“选定”成员对组成员资格进行建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946569/
Tôi thích Smartcase và tôi cũng thích lệnh tìm kiếm * và #. Nhưng tôi thích các lệnh tìm kiếm * và # phân biệt chữ hoa chữ thường, trong khi các lệnh tìm kiếm / và ? tuân theo phương pháp phỏng đoán chữ hoa chữ thường. Có cài đặt nào bị ẩn ở đâu đó mà tôi chưa tìm thấy không? tôi thà
đóng cửa. Câu hỏi này lạc đề. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Đã cập nhật câu hỏi để nó phù hợp với chủ đề về Stack Overflow. Đóng cửa 10 năm trước. Cải thiện câu hỏi này
Từ trang web sau, tôi đã tìm thấy mã để thực hiện xác thực java AD. http://java2db.com/jndi-ldap-programming/solution-to-sslhandshakeexdi
Có vẻ như tan chảy sẽ định hình lại khung dữ liệu của bạn bằng cách sử dụng cột id và các biến số đo xếp chồng, sau đó cho phép bạn thực hiện tổng hợp thông qua chuyển đổi. ddply, từ gói plyr trông rất giống nhau.. bạn cung cấp cho nó một khung dữ liệu, một vài biến cột để nhóm và tổng hợp
Câu hỏi của tôi là về memcached. Facebook sử dụng memcached làm bộ đệm cho dữ liệu có cấu trúc của mình để giảm độ trễ cho người dùng. Họ đã tối ưu hóa hiệu suất của memcached bằng UDP trên Linux. h
Trong tuyến Camel, tôi đang sử dụng thành phần exec để cuộn qua grep, nhưng grep sử dụng ${HOSTNAME} không hoạt động, bên dưới là tuyến Camel của tôi. Hãy tìm kiếm sự giúp đỡ với điều này.
Tôi đang cố gắng thực hiện một truy vấn khá phức tạp để có thể loại trừ các mục phù hợp với một bộ tiêu chí cụ thể. Đây là một mô hình siêu đơn giản để giải thích vấn đề nan giải của tôi: class Thing(models.Model) user = mod
Tôi đang cố gắng thực hiện một truy vấn khá phức tạp để có thể loại trừ các mục phù hợp với một bộ tiêu chí cụ thể. Đây là một mô hình siêu đơn giản để giải thích vấn đề nan giải của tôi: class Thing(models.Model) user = mod
Tôi đã tìm thấy rất nhiều cách nhúng/mục nội dung cũ và tôi đã làm theo cách mới nhất (tôi giả sử) được tìm thấy ở đây: https://blog.angular-university.io/angular-ng-content/ Tôi đang thử
Tôi đang tìm gợi ý về cách bắt đầu fastify-cli bằng cách sử dụng fastify-nextjs. Tôi đã thử chỉ cần thêm mã vào vị trí được đề xuất nhưng nó không hoạt động. 'sử dụng nghiêm ngặt' const path = req
Tôi đang cố gắng tích hợp biên độ js với React và Gatsby. Khi làm nhà phát triển gatsby, mọi thứ đều ổn như diễn ra trong trình duyệt, nhưng khi tôi thử xây dựng gatsby, tôi gặp lỗi sau
Tôi đang cố gắng tránh kiểm tra null quá mức, nhưng đồng thời tôi muốn làm điều đó khi tôi cần làm cho mã trở nên mạnh mẽ hơn. Nhưng đôi khi tôi cảm thấy nó bắt đầu trở nên quá phòng thủ vì tôi không triển khai API. Sau đó, tôi đã tránh được một số kiểm tra null, nhưng khi tôi bắt đầu kiểm tra đơn vị, nó bắt đầu luôn chờ ngoại lệ thời gian chạy
Đã thử tìm kiếm Kibana chứa một số KHÔNG nhưng nhận được kết quả chứa KHÔNG nên đoán cú pháp của tôi không chính xác: "sô cô la" VÀ "sữa" VÀ KHÔNG "bò" VÀ KHÔNG "tr
Tôi đang sử dụng gói chia sẻ mã nguồn mở để tích hợp facebook trong iOS nhưng tôi gặp phải lỗi "FT_Load_Glyph không thành công: glyph 65535: lỗi 6". Tôi đã thử nó trên một máy mac khác
Tôi đang cố gắng ước tính một mô hình tobit tiêu chuẩn được kiểm duyệt về 0. Các biến là các biến phụ thuộc: các biến độc lập về hạnh phúc: thành phố (Chicago, New York), giới tính (nam, nữ), việc làm (0=thất nghiệp, 1=có việc làm), loại công việc (thất nghiệp, xanh, trắng
Tôi có bố cục dự án mẫu như thế này /a/sources/main/java/java-resources/.jpg b/source/main/java/b.java-resources/b.jpg build.gradle settings.gr
Cách lặp qua nhiều thuộc tính trong một mảng và cách sử dụng hàm ánh xạ để hiển thị nhiều thuộc tính trong mảng vào một trang web import React, { Component } from 'react' import './App.css';
Tôi có một hàm JavaScript thực hiện lệnh gọi AJAX để trả về một số dữ liệu, lệnh gọi được thực hiện trong một sự kiện thay đổi danh sách chọn. Tôi đã thử nhiều cách để hiển thị trình tải trong khi chờ đợi, vì nó hiện tạm dừng danh sách chọn từ Angul của khách hàng
Có thể trước đây tôi đã hỏi nhưng không tìm được. Tôi đang viết rất nhiều câu lệnh dưới dạng: if (bar.getFoo() != null) { this.foo = bar.getFoo() } Tôi đã nghĩ đến toán tử ba ngôi, nhưng tôi không nghĩ vậy
Tôi có một biểu mẫu mà tôi đang thực hiện một số JavaScript xác thực trước khi gửi nó tới PHP và hàm JavaScript sau xác thực sẽ đăng văn bản mà người dùng đã nhập vào đó. nhãn ở cuối trang, tuy nhiên, thông báo này xuất hiện trong chốc lát rồi biến mất...
Tôi là một lập trình viên xuất sắc, rất giỏi!