数据库表设计(用户,收件人,地址)

时间:2016-04-13 05:28:41

标签: mysql sql-server database database-design database-schema

这是我第一次在堆栈溢出时发布。我在为以下情况建模时遇到了很多麻烦。希望得到一些帮助。

以下是业务规则:

  • 用户与收件人的关系为0..1到多(例如:用户可以拥有零个或多个收件人)
  • 用户与地址有0..1到多个关系(例如:用户可以有零个或多个地址)
  • 收件人与地址有1比1的关系(例如:收件人必须有地址)

这是我到目前为止所做的:

  • 用户(UserID PK)
  • 收件人(RecipientID PK,UserID NOT NULL FK,AddressID NOT NULL FK)
  • 地址(AddressID PK,UserID NULL FK)

真正困扰我的是地址表中的UserID必须是可空的,我看不到任何方法。

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:0)

这是因为您使用" User"作为主要实体, 但这里的场景需要"地址"到主要实体,所以

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
class SecurityConfig extends WebSecurityConfigurerAdapter {

@SuppressWarnings("SpringJavaAutowiringInspection")
@Autowired
private UserDetailsService userDetailsService;

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/", "/public/**").permitAll()
            .antMatchers("/users/**").hasAuthority("ADMIN")
            .anyRequest().fullyAuthenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .failureUrl("/login?error")
            .usernameParameter("email")
            .permitAll()
            .and()
            .logout()
            .logoutUrl("/logout")
            .deleteCookies("remember-me")
            .logoutSuccessUrl("/")
            .permitAll()
            .and()
            .rememberMe();
}

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
            .userDetailsService(userDetailsService)
            .passwordEncoder(new BCryptPasswordEncoder());
}

Address (Aid PK)
Recipient (Rid PK, Aid not null FK)
User (Uid PK, Rid FK, Aid FK)

答案 1 :(得分:0)

正如mehany在评论中所写,你可以在用户和地址之间添加关系表:

File jarFile = new File(getDir([WHATEVERY_YOU_WANT_FOLDER_NAME], Context.MODE_PRIVATE), [JAR_FILE_NAME]);