- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
据我所知,每当我在 JPA/Hibernate 实体内的 Long 字段上使用 @Id 和 @GeneratedValue 时,我实际上是在使用代理键,我认为这是定义主键的一种非常好的方式,考虑到我在使用复合主键方面不太好的经验,其中:
我知道 hibernate 可以支持这两种类型的 PK,但我之前与有经验的同事聊天时让我感到疑惑,他们说在执行复杂的 SQL 查询和存储过程过程时,复合 PK 更容易处理。
他们继续说,使用代理键会使加入时的事情变得复杂,并且在某些情况下使用代理键无法执行某些操作。虽然我很抱歉我不能在这里解释细节,因为他们解释的时候我不够清楚。也许下次我会提供更多细节。
我目前正在尝试做一个项目,并想尝试代理键,因为它不会跨表重复,而且我们可以更改业务列值。当需要一些业务值(value)组合的唯一性时,我可以使用类似的东西:
@Table(name="MY_TABLE", uniqueConstraints={
@UniqueConstraint(columnNames={"FIRST_NAME", "LAST_NAME"}) // name + lastName combination must be unique
但由于之前关于组合键的讨论,我仍然有疑问。
您能分享一下您在这件事上的经验吗?谢谢!
câu trả lời hay nhất
关于任何应用程序的第一条规则是需求会发生变化。时期。所以,今天看起来很适合 PK 的东西明天可能根本就不是 PK。
如果一个值包含以下特征,则它是一个很好的 PK 候选者:
也就是说,在现实世界中几乎不可能永久拥有具有这些特征的任何东西。我的意思是,即使某些东西在今天是不变的和独特的,也不意味着它会永远如此。
因此,尽可能使用代理键。仅对遗留数据库使用自然键。远离那些建议自然键比代理项更好的 friend (开玩笑):-)
当然:您可以在数据库中使用约束强制执行唯一性规则(就像您在示例中所做的那样),如果这是业务规则,则两个记录不可能共享相同的值。当 future 业务逻辑发生变化时,你会很高兴看到你使用了代理键;-)
但是不要相信 stackoverflow 上的一个随便的家伙。阅读来自维基百科的这两篇文章:
http://en.wikipedia.org/wiki/Surrogate_key
http://en.wikipedia.org/wiki/Natural_key
关于java - hibernate : Opinions in Composite PK vs Surrogate PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577754/
Hướng dẫn: tạo bảng t7(c1 số khóa chính,c2 số); chèn vào t7 các giá trị (1,3); chèn vào t
Ai đó có thể cho tôi biết lý do tại sao url được tạo bằng cách nhấp vào liên kết mẫu lại là /.pk. Tôi muốn hiểu cách hoạt động của url. Mới sử dụng Django ở đây. Traceback (cuộc gọi gần đây nhất): Tệp "
Tôi có trình kích hoạt MySQL sau. Nó được kích hoạt bởi các bản cập nhật cho tbl_users. Nếu một bản ghi đã tồn tại cho ngày đó, nó sẽ cập nhật tbl_user_stats với một số thông tin; nếu không có bản ghi nào cho ngày đó, nó sẽ cập nhật nó trong tbl_user_stats.
Đã biết: tX_1.name không bao giờ có thể là NULL, có độ dài thay đổi, tối đa 45 ký tự và phải luôn là duy nhất. Những yếu tố nào ảnh hưởng đến việc nên sử dụng PK thay thế cộng với cột duy nhất (lược đồ 1) hay liệu khóa tự nhiên PK có nên sử dụng cột duy nhất của bảng đầu tiên hay không.
Tôi có một bảng chứa PK tổng hợp (code_id, user_id) đã có bản ghi 100k. Có an toàn khi chuyển từ PK tổng hợp sang PK đơn lẻ như trong ví dụ bên dưới không? THAY ĐỔI thứ tự BẢNG THẢ C
Tại sao mô hình này không tạo pk và nhắc nhở tính toàn vẹn của pk của mô hình liên quan? Khi bạn tạo một phiên bản mới của UserProfile, nó sẽ không tạo khóa chính. Tôi đang làm theo hướng dẫn từng bước một trong hướng dẫn này (đó là tất cả @
LƯU Ý: Tôi mới tham gia phát triển JPA và đang học hỏi nhanh chóng, vì vậy hãy tha thứ cho tôi nếu có bất kỳ điều gì rõ ràng mà tôi có thể đã bỏ sót. Sau đây là các thực thể JPA có liên quan. Địa chỉ không được liệt kê nhưng nó là một thực thể rất đơn giản với id có tên @Id. Gửi hàng tới
Chúng tôi có hai thực thể trong hệ thống của mình như sau: Invoice:[InvoiceID, OrgID] là khóa chính được biểu thị dưới dạng Bean và được liên kết với Invoice bằng chú thích @IdClass WorkflowStat
Tình huống: Tôi đã gặp một số mã trộn lẫn JPA với JDBC trong một giao dịch. JDBC đang thực hiện INSERT trên một bảng về cơ bản là một hàng trống, đặt khóa chính thành (SELECT MAX(PK) + 1) và đặt middleNam
Tôi có cơ sở dữ liệu với 3 bảng: danh mục, mục, mối quan hệ. danh mục chứa các danh mục. Sản phẩm được lưu trữ trong các mục và mối quan hệ là một bảng liên kết lưu trữ id sản phẩm và id danh mục hoặc danh mục. cho một dự án nhất định
Sự cố Khi tôi cố gắng nhập tệp CSV, tôi nhận được mục nhập trùng lặp "xx-xx-xxx" cho khóa "PRIMARY" - Lỗi PK. Bản thân PK là hai varchar được nối với nhau. Theo như tôi biết, các kết nối không bao giờ bị trùng lặp. TÔI
Tôi đang cố gắng chọn từ hai bảng lớn bằng cách sử dụng phép nối: EXPLAIN SELECT SQL_NO_CACHE e.* FROM `table_A` e JOIN (SELECT id FROM
Tôi có tệp post_list.html này: (bỏ qua url 'blog:post_detail' thứ hai) {% cho bài đăng trong post_list %} {{ post.title }}
Tôi cần làm việc với bảng cơ sở dữ liệu hiện có bằng JPA. Các bảng này sử dụng các khóa chính tổng hợp. Thuộc tính khóa ngoại chồng lên khóa chính của bảng. Ví dụ đơn giản, mỗi "Order" có nhiều Table Order "OrderItems"
Theo như tôi biết, bất cứ khi nào tôi sử dụng @Id và @GeneratedValue trên trường Long bên trong thực thể JPA/Hibernate, tôi thực sự đang sử dụng khóa thay thế, mà tôi nghĩ là một cách rất hay để xác định khóa chính, xem xét Cho đến khi tôi tôi ở đây
Vì vậy, tôi có mã này: request = self.factory.get(reverse('portal-edit-automation', args=(self.rule.id,))) phản hồi
Khi sử dụng công cụ lưu trữ InnoDB trong MySQL, nếu bạn không chỉ định KHÓA CHÍNH khi tạo bảng, một chỉ mục duy nhất ẩn sẽ được sử dụng làm chỉ mục nhóm. Tôi hiểu rằng các chỉ mục ẩn này có thể gây tranh cãi do khóa mutex trên từ điển dữ liệu. Câu hỏi của tôi là - như
Tôi đang cố xóa tất cả các hàng trong bảng1 có PK phù hợp trong bảng2. Mặc dù mệnh đề WHERE của tôi sử dụng khóa nhưng tôi vẫn gặp lỗi 1175. Tôi quen với việc chuyển đổi chế độ an toàn, nhưng đó không phải là vấn đề vì WHERE của tôi
Tôi đang cố cập nhật bản ghi của Chế độ xem có trường khóa ngoại, vì vậy tôi gặp lỗi vì tôi đang cố cập nhật một mô hình khác không có trường khóa ngoại và nó hoạt động tốt. Có những câu hỏi tương tự khác nhưng trong trường hợp của tôi, tôi đã đậu pk. urls.py urlpatte
Việc triển khai Python NLTK của Beeferman và PK của WindowDIFF nhận được kết quả hoàn toàn khác với cả hai triển khai phân tách python. Sử dụng các thông số tương tự. hy vọng: 01001000
Tôi là một lập trình viên xuất sắc, rất giỏi!